package com.doit.day05

object _05_面相对象之伴生类和伴生对象 {
  def main(args: Array[String]): Unit = {

    val dog: Dog = new Dog("bob",1,"male")
    //虽然说可以相互访问对方得私有属性，很亲切
    //但是，调用得时候，只能够访问自己得东西，别人得访问不了

    val dog1: Dog = Dog("bob",1,"male")



  }

}


//伴生类  伴生对象
//如果class类和object类两个类的类名相同，那么这两个类就相伴相生
//class类是object类的伴生类
//object类是class类的伴生对象
//除了说公用一个类型，可以做到动静分离
//可以相互访问对方得私有属性
//可以重写apply方法和 unapply方法
//重写apply方法 那么可以干嘛呢？创建Dog对象得时候，不用new
//unapply方法 可以很好得用于模式匹配
class Dog(val name: String,val age: Int,var gender: String)


object Dog {
  val address:String = "火星"
  val phone:String = "1101"
  def apply(name: String, age: Int, gender: String): Dog = new Dog(name, age, gender)
  def unapply(arg: Dog): Option[(String, Int, String)] = Some(arg.name,arg.age,arg.gender)
}
